package demo03;

import java.util.ArrayList;
import java.util.Iterator;

/*
 *  泛型的通配符：
 *      ?：代表任意的数据类型
 *  使用方式：
 *      不能创建对象使用
 *      只能作为方法的参数使用
 */
public class Demo05Generic {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);

        ArrayList<String> arrayList2 = new ArrayList<>();
        arrayList2.add("a");
        arrayList2.add("b");

        printArray(arrayList);
        printArray(arrayList2);

        // ArrayList<?> arrayList3 = new ArrayList<?>(); // 通配符不能在创建对象时使用
    }

    /*
     *  定义一个方法，能遍历所有类型的ArrayList集合
     *  这时候我们不知道ArrayList集合使用什么数据类型，可以使用泛型的通配符?来接收数据类型
     *  注意：泛型没有继承的概念，不能填入Object！
     */
    public static void printArray(ArrayList<?> arrayList) { // 通配符可以作为方法的参数使用
        // 使用迭代器遍历集合
        Iterator<?> iterator = arrayList.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next()); // 取出的对象是Object类型，可以接收任意的数据类型，但是只能使用Object的方法
        }
    }
}
